package br.com.delta.DAO;

import java.util.ArrayList;
import java.util.List;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteException;
import android.util.Log;
import br.com.delta.interfaces.Persistencia;
import br.com.delta.modelo.Nota;
import br.com.delta.modelo.Usuario;
import br.com.delta.util.DataBaseHelper;



public class NotasDAO extends DataBaseHelper implements Persistencia {
	private static final String NOME_TABELA = "notas";
	private Context contexto;

	public NotasDAO(Context context) {
		super(context);
		// TODO Auto-generated constructor stub
		this.contexto = context;
	}

	public Object buscar(long id) {
		// TODO Auto-generated method stub
		return null;
	}

	public List<Nota> listarTodos() {
		// TODO Auto-generated method stub
		try {

			Cursor c = db.query(NOME_TABELA, new String[] { "_id_nota", "titulo", "descricao", "data", "_id_usuario" }, null, null, null, null, null);

			List<Nota> notas = new ArrayList<Nota>();
			if (c.moveToFirst()) {
				// Recupera os indices das colunas
				int idxId = c.getColumnIndex("_id_nota");
				int idxTitulo = c.getColumnIndex("titulo");
				int idxDescricao = c.getColumnIndex("descricao");
				int idxData = c.getColumnIndex("data");
				long idxIdUsuario = c.getColumnIndex("_id_usuario");

				do {
					Nota nota = new Nota();
					nota.setIdNota(c.getInt(idxId));
					nota.setTitulo(c.getString(idxTitulo));
					nota.setDescricao(c.getString(idxDescricao));
					nota.setData(c.getString(idxData));
					Usuario usuario = new Usuario();
					usuario = (Usuario) new UsuarioDAO(contexto).buscar(idxIdUsuario);
					nota.setUsuario(usuario);
					notas.add(nota);

				} while (c.moveToNext());

			}
			return notas;
		} catch (Exception e) {
			// TODO: handle exception
			Log.e(NOME_TABELA, e.toString());
		} finally {
			fechar();
		}
		

		return null;
	}
	
	public List<Nota> listarTodos(Usuario objUsuario) {
		// TODO Auto-generated method stub
		try {
		
			String where = "_id_usuario = ?";
			String _idUsuario = String.valueOf(objUsuario.getIdUsuario());
			String[] whereArgs = new String[]{_idUsuario};

			Cursor c = db.query(NOME_TABELA, new String[] { "_id_nota", "titulo", "descricao", "data", "_id_usuario" }, where, whereArgs, null, null, null);

			List<Nota> notas = new ArrayList<Nota>();
			if (c.moveToFirst()) {
				// Recupera os indices das colunas
				int idxId = c.getColumnIndex("_id_nota");
				int idxTitulo = c.getColumnIndex("titulo");
				int idxDescricao = c.getColumnIndex("descricao");
				int idxData = c.getColumnIndex("data");
				long idxIdUsuario = c.getColumnIndex("_id_usuario");

				do {
					Nota nota = new Nota();
					nota.setIdNota(c.getInt(idxId));
					nota.setTitulo(c.getString(idxTitulo));
					nota.setDescricao(c.getString(idxDescricao));
					nota.setData(c.getString(idxData));
					Usuario usuario = new Usuario();
					usuario.setIdUsuario(c.getLong((int) idxIdUsuario));
					usuario = (Usuario) new UsuarioDAO(contexto).buscar(usuario.getIdUsuario());
					nota.setUsuario(usuario);
					notas.add(nota);

				} while (c.moveToNext());

			}
			return notas;
		} catch (Exception e) {
			// TODO: handle exception
			Log.e(NOME_TABELA, e.toString());
		} finally {
			fechar();
		}

		return null;
	}

	public long salvar(Object o) {
		long id = 0;
		try {
			id = ((Nota) o).getIdNota();
			if (id != 0) {
				atualizar(o);

			} else {
				id = inserir(o);
			}

		} catch (SQLiteException e) {
			Log.e(NOME_TABELA, "Erro ao salvar" + e.toString());
		}
		return id;
	}

	public int atualizar(Object o) {
		// TODO Auto-generated method stub
		ContentValues values = new ContentValues();
		values.put("titulo", ((Nota) o).getTitulo());
		values.put("descricao", ((Nota) o).getDescricao());
		values.put("data", ((Nota) o).getData());
		String _id = String.valueOf(((Nota) o).getIdNota());
		String where = "_id_nota = ?";
		String[] whereArgs = new String[] { _id };
		return db.update(NOME_TABELA, values, where, whereArgs);

	}

	public int deletar(Object o) {
		// TODO Auto-generated method stub

		String where = "_id_nota = ?";
		String _id = String.valueOf(((Nota) o).getIdNota());
		String[] whereArgs = new String[] { _id };
		return db.delete(NOME_TABELA, where, whereArgs);
	}

	public long inserir(Object o) {
		// TODO Auto-generated method stub
		ContentValues values = new ContentValues();
		values.put("titulo", ((Nota) o).getTitulo());
		values.put("descricao", ((Nota) o).getDescricao());
		values.put("data", ((Nota) o).getData());
		values.put("_id_usuario", ((Nota) o).getUsuario().getIdUsuario());

		return db.insert(NOME_TABELA, "", values);
	}

	public void fechar() {
		// fecha o banco
		if (db != null) {
			db.close();
		}
	}

}
